/*
 * Файл first.c
 * Для компіляції програми виконати 
 * mpicc first.c -o first
 
 * Для виконання програми виконати 
 * mpirun -n <N> -hostfile <hostfile> ./first
 * <N> - кількість процесів,
 * <hostfile> - файл з DNS-іменами/IP-адресами вузлів кластера
 */
#include <stdio.h>
#include "mpi.h" 
int main(int argc, char* argv[]) { 
  int ProcNum, ProcRank, RecvRank; 
  MPI_Status Status; 
// ---  Програмний код без використанням MPI-функцій
  MPI_Init(&argc, &argv);
  // 
  MPI_Comm_size(MPI_COMM_WORLD, &ProcNum);
  MPI_Comm_rank(MPI_COMM_WORLD, &ProcRank); 
  // Програмний код з використанням MPI-функцій
  if ( ProcRank == 0 ) { // Дії для процесу 0 
     printf ("\n Hello from process %3d\n", ProcRank);
     int i;
     for ( i=1; i < ProcNum; i++ ) { 
       MPI_Recv(&RecvRank, 1, MPI_INT, MPI_ANY_SOURCE,
         MPI_ANY_TAG, MPI_COMM_WORLD, &Status); 
       printf("\n Hello from process %3d\n", RecvRank); 
      } 
  } 
  else // Дії для всіх процесов, крім процесу 0
    MPI_Send(&ProcRank,1,MPI_INT,0,0,MPI_COMM_WORLD);
  // Завершення роботи
  MPI_Finalize(); 
// --- Програмний код без використанням MPI-функцій
  return 0; 
 } 
